/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.vnf.be;

import edu.upn.sigemfi.seg.be.Sucursal;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name = "VNF_TRANSACCION_NO_FINANCIERA")
@NamedQueries({
    @NamedQuery(name = "TransaccionNoFinanciera.findAll", query = "SELECT t FROM TransaccionNoFinanciera t"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByIdTransaccionNf", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.idTransaccionNf = :idTransaccionNf"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByTipoMovimiento", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.tipoMovimiento = :tipoMovimiento"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByFecha", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.fecha = :fecha"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByMontoTransaccion", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.montoTransaccion = :montoTransaccion"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByItf", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.itf = :itf"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByMontoCargadoTr", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.montoCargadoTr = :montoCargadoTr"),
    @NamedQuery(name = "TransaccionNoFinanciera.findByXtipo", query = "SELECT t FROM TransaccionNoFinanciera t WHERE t.xtipo = :xtipo")})
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="XTIPO", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value = "NF")
//
public abstract class TransaccionNoFinanciera implements Serializable {//para herencia
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID_TRANSACCION_NF", nullable=false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long idTransaccionNf;
    @Column(name = "TIPO_MOVIMIENTO")
    private String tipoMovimiento;
    @Column(name = "FECHA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecha;
    @Column(name = "MONTO_TRANSACCION")
    private Double montoTransaccion;
    @Column(name = "ITF")
    private Double itf;
    @Column(name = "MONTO_CARGADO_TR")
    private Double montoCargadoTr;
    @Column(name = "FID_SEG_AGENCIA")
    private Long fidAgencia;

//    @Column(name = "XTIPO", length=2)
//    private String xtipo;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_GIRO", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private Giro giro;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_LIBRO_OPERACION", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private LibroOperacion libroOperacion;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_ORDEN_PAGO", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private OrdenPago ordenPago;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_SERVICIO_GENERAL", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private ServicioGeneral servicioGeneral;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_SERVICIO_INSTITUCIONAL", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private ServicioInstitucional servicioInstitucional;
//    @JoinColumn(name = "FID_VNF_TIPOTRANSACCION_NF", referencedColumnName = "ID_TIPOTRANSACCION_NF")
//    @ManyToOne(fetch = FetchType.LAZY)
//    private TipoTransaccionNf fidVnfTipotransaccionNf;
//    @JoinColumn(name = "ID_TRANSACCION_NF", referencedColumnName = "ID_TIPOCAMBIO", insertable = false, updatable = false)
//    @OneToOne(optional = false, fetch = FetchType.LAZY)
//    private TtipoCambio ttipoCambio;

    public TransaccionNoFinanciera() {
    }

    public TransaccionNoFinanciera(Long idTransaccionNf) {
        this.idTransaccionNf = idTransaccionNf;
    }

    public TransaccionNoFinanciera(Long idTransaccionNf, String tipoMovimiento) {
        this.idTransaccionNf = idTransaccionNf;
        this.tipoMovimiento = tipoMovimiento;
    }

    public Long getIdTransaccionNf() {
        return idTransaccionNf;
    }

    public void setIdTransaccionNf(Long idTransaccionNf) {
        this.idTransaccionNf = idTransaccionNf;
    }

    public String getTipoMovimiento() {
        return tipoMovimiento;
    }

    public void setTipoMovimiento(String tipoMovimiento) {
        this.tipoMovimiento = tipoMovimiento;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public Double getMontoTransaccion() {
        return montoTransaccion;
    }

    public void setMontoTransaccion(Double montoTransaccion) {
        this.montoTransaccion = montoTransaccion;
    }

    public Double getItf() {
        return itf;
    }

    public void setItf(Double itf) {
        this.itf = itf;
    }

    public Double getMontoCargadoTr() {
        return montoCargadoTr;
    }

    public void setMontoCargadoTr(Double montoCargadoTr) {
        this.montoCargadoTr = montoCargadoTr;
    }

    public Long getFidAgencia() {
        return fidAgencia;
    }

    public void setFidAgencia(Long fidAgencia) {
        this.fidAgencia = fidAgencia;
    }






//    public String getXtipo() {
//        return xtipo;
//    }
//
//    public void setXtipo(String xtipo) {
//        this.xtipo = xtipo;
//    }

//    public Giro getGiro() {
//        return giro;
//    }
//
//    public void setGiro(Giro giro) {
//        this.giro = giro;
//    }
//
//    public LibroOperacion getLibroOperacion() {
//        return libroOperacion;
//    }
//
//    public void setLibroOperacion(LibroOperacion libroOperacion) {
//        this.libroOperacion = libroOperacion;
//    }
//
//    public OrdenPago getOrdenPago() {
//        return ordenPago;
//    }
//
//    public void setOrdenPago(OrdenPago ordenPago) {
//        this.ordenPago = ordenPago;
//    }
//
//    public ServicioGeneral getServicioGeneral() {
//        return servicioGeneral;
//    }
//
//    public void setServicioGeneral(ServicioGeneral servicioGeneral) {
//        this.servicioGeneral = servicioGeneral;
//    }
//
//    public ServicioInstitucional getServicioInstitucional() {
//        return servicioInstitucional;
//    }
//
//    public void setServicioInstitucional(ServicioInstitucional servicioInstitucional) {
//        this.servicioInstitucional = servicioInstitucional;
//    }
//
//    public TipoTransaccionNF getFidVnfTipotransaccionNf() {
//        return fidVnfTipotransaccionNf;
//    }
//
//    public void setFidVnfTipotransaccionNf(TipoTransaccionNF fidVnfTipotransaccionNf) {
//        this.fidVnfTipotransaccionNf = fidVnfTipotransaccionNf;
//    }
//
//    public TtipoCambio getTtipoCambio() {
//        return ttipoCambio;
//    }
//
//    public void setTtipoCambio(TtipoCambio ttipoCambio) {
//        this.ttipoCambio = ttipoCambio;
//    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idTransaccionNf != null ? idTransaccionNf.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TransaccionNoFinanciera)) {
            return false;
        }
        TransaccionNoFinanciera other = (TransaccionNoFinanciera) object;
        if ((this.idTransaccionNf == null && other.idTransaccionNf != null) || (this.idTransaccionNf != null && !this.idTransaccionNf.equals(other.idTransaccionNf))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "edu.upn.sigemfi.vnf.be.TransaccionNoFinanciera[idTransaccionNf=" + idTransaccionNf + "]";
    }

}
